/**
 * 表单验证工具函数
 */

/**
 * 手机号验证
 * @param {object} rule - 验证规则对象
 * @param {string} value - 需要验证的值
 * @param {function} callback - 回调函数
 */
export function validatePhone(rule, value, callback) {
  // 手机号正则表达式（中国大陆）
  const phoneRegex = /^1[3-9]\d{9}$/;
  
  // 如果值为空且非必填，则通过验证
  if (!value) {
    callback();
    return;
  }
  
  // 验证手机号格式
  if (!phoneRegex.test(value)) {
    callback(new Error('请输入正确的手机号'));
    return;
  }
  
  callback();
}

/**
 * 邮箱验证
 * @param {object} rule - 验证规则对象
 * @param {string} value - 需要验证的值
 * @param {function} callback - 回调函数
 */
export function validateEmail(rule, value, callback) {
  // 邮箱正则表达式
  const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
  
  // 如果值为空且非必填，则通过验证
  if (!value) {
    callback();
    return;
  }
  
  // 验证邮箱格式
  if (!emailRegex.test(value)) {
    callback(new Error('请输入正确的邮箱地址'));
    return;
  }
  
  callback();
}

/**
 * 创建通用的表单验证规则
 * @param {Object} options - 验证规则配置项
 * @returns {Array} 验证规则数组
 */
export function createValidationRules({
  required = false,
  type = null,
  message = null,
  trigger = 'blur',
  min = null,
  max = null
} = {}) {
  const rules = [];
  
  // 必填验证
  if (required) {
    rules.push({
      required: true,
      message: message || '该字段为必填项',
      trigger
    });
  }
  
  // 类型验证
  if (type) {
    switch (type) {
      case 'phone':
        rules.push({
          validator: validatePhone,
          trigger
        });
        break;
      case 'email':
        rules.push({
          validator: validateEmail,
          trigger
        });
        break;
    }
  }
  
  // 长度验证
  if (min !== null || max !== null) {
    const lengthRule = {
      trigger
    };
    
    if (min !== null) {
      lengthRule.min = min;
    }
    if (max !== null) {
      lengthRule.max = max;
    }
    
    rules.push(lengthRule);
  }
  
  return rules;
}